"""
配置管理模块 - 统一管理应用配置
"""
import os
from pathlib import Path

class Config:
    """应用程序配置（统一接口）"""
    # 串口配置
    DEFAULT_BAUDRATE = 115200
    SERIAL_TIMEOUT = 5

    # 数据帧常量（用于下载管理）
    START_FRAME = 0x01
    DATA_FRAME = 0x02
    END_FRAME = 0x03

    FRAME_HEADER = b'\xAA\x55'
    FRAME_TAIL = b'\xDF\xAF'
    HEADER_LEN = 2

    # 通信协议（用于串口流式帧解析）
    FRAME_START = "ee"
    FRAME_END = "fffcffff"

    # 命令类型
    CMD_TYPES = {
        'SENSOR_DATA': 'b1',
        'SET_TIME': 'f7',
        'GET_TIME': 'dd',
        'STOP_TIME': 'e7',
        'GET_FILES': 'e8',
        'REAL_DATA': 'e9',
        'SET_INTERVAL': 'b111'
    }

    # 控制消息类型
    CTRL_MSG_TYPES = {
        'NOTIFY_INT_TEXT': '07',  # 格式化的文本
        'NOTIFY_TEXT': '10',      # 文本数值
        'CONTROL_INPUT': '11'   # 文本
    }

    # 采集间隔选项
    INTERVAL_OPTIONS = [
        "1s", "2s", "4s", "5s", "10s", "15s", "20s", "30s",
        "1m", "5m", "10m", "15m", "20m", "30m", "1h", "1h30m",
        "2h", "3h"
    ]

    # UI相关配置
    TABLE_COLUMNS = ['ID', '参数名称', '实际值']
    TABLE_ROW_COUNT = 13

    # 缓冲区限制/帧长度
    MAX_BUFFER_SIZE = 2000
    MIN_FRAME_LENGTH = 22

    @staticmethod
    def get_icon_path(icon_name: str) -> str:
        """获取图标文件路径"""
        # core/config.py 的上级目录的上级即项目根目录
        base_path = Path(__file__).parent.parent / "ico"
        return str(base_path / icon_name)

    @staticmethod
    def get_icon_config() -> dict:
        """统一的图标映射"""
        return {
            'refresh': Config.get_icon_path('reload.png'),
            'start': Config.get_icon_path('play.png'),
            'pause': Config.get_icon_path('pause.png'),
            'save': Config.get_icon_path('save.png'),
            'real': Config.get_icon_path('realtime.png'),
            'time': Config.get_icon_path('time.png'),
            'path': Config.get_icon_path('file.png'),
            'download': Config.get_icon_path('download.png'),
            'config': Config.get_icon_path('config.png')
        }

    @staticmethod
    def get_default_download_path() -> str:
        """获取默认下载路径"""
        return os.path.join(os.path.expanduser("~"), "Desktop")

